package com.xb.loan.admin.util;

import org.apache.commons.lang3.StringUtils;

/**
 * 北京掌中彩信息科技有限公司源代码，版权归北京掌中彩信息科技有限公司所有。
 * 
 * 项目名称 : oss-center
 * 创建日期 : 2015年11月2日
 * 类  描  述 : 数据权限处理类
 * 修改历史 : 
 *     1. [2015年11月2日]创建文件 by zhiqiang.zhang
 */
public class PartnerUtil {
		/**
		 * 拼装渠道权限SQL语句
		 * @param partnerLevel 渠道级别
		 * @param partnerIds  渠道权限列表    2,3,30
		 * @param partnerId   渠道精确ID
		 * @param partnerLikeId 渠道likeID
		 * @return
		 * 2015年11月30日 by zhangyi
		 */
		public static String getAccessSQL(String partnerLevel,String partnerIds,String partnerId,String partnerLikeId){
			partnerLevel = ObjectUtil.formatString(partnerLevel);
			partnerIds = ObjectUtil.formatString(partnerIds);
			partnerId = ObjectUtil.formatString(partnerId);
			partnerLikeId = ObjectUtil.formatString(partnerLikeId);
			
			StringBuilder sb = new StringBuilder();
			if(partnerId != null){// 精确查询  partnerLevel  partnerLikeId  不启动任何作用
				sb.append(" partnerInfo.partner_id = '");
				sb.append(partnerId);
				sb.append("' and " );
				sb.append(getPartnerDataQueryAuthoritySQL(partnerIds));
				/*String[] arrayPartnerId = partnerIds.split(",");  //partnerIds肯定不为空
				for (String string : arrayPartnerId) {
					sb.append(" or partnerInfo.partner_id like '" );
					sb.append(string.substring(1, string.length()-1));
					sb.append("%' " );
				}
				sb.append(")" );*/
			}else{// 渠道精确ID为空   
				if(partnerLikeId != null){
					sb.append(" partnerInfo.partner_id like '");
					sb.append(partnerLikeId);
					sb.append("%' and ");
				}
				sb.append(getPartnerDataQueryAuthoritySQL(partnerIds));
				if(partnerLevel != null){
					sb.append(" and partnerInfo.PARTNER_LEVEL = ");
					sb.append(partnerLevel);
				}
			}
			return sb.toString();
		}
/**
 * 
 * 根据中心OSS中登录用户权限和要查询的渠道级别，组织查询的SQL的where条件字符串
 * 默认渠道表别名使用 partnerInfo
 * @param partnerLevel 要查询的渠道级别
 * @param authorityPartnerIdStr 中心OSS登录帐号可查询的渠道编号列表字符串，已英文“,”逗号分隔
 * @param partnerId    查询指定的渠道编号
 * @return SQL语句的where条件字符串 
 * 2015年11月2日 by zhiqiang.zhang
 */
    public static String getPartnerDataQueryAuthoritySQL(String partnerLevel,String authorityPartnerIdStr,String partnerId){
        //渠道级别，当partnerLevel为null时值为0
        int level=0;
        if(!StringUtils.isEmpty(partnerLevel)){
            level=Integer.parseInt(partnerLevel);
        }
        
        StringBuilder result=new StringBuilder();
        
        switch (level) {
        case 1:
        	//若没有授权渠道，则什么都不能查询
        	if(authorityPartnerIdStr == null || StringUtils.isEmpty(authorityPartnerIdStr))
        		result.append("1 = 2");
        	else{
        		result.append(" ( partnerInfo.PARTNER_ID in ( ").append(authorityPartnerIdStr).append(" ) and partnerInfo.PARTNER_LEVEL=1  ");
	            if(StringUtils.isNotBlank(partnerId)){ 
	                result.append("  and partnerInfo.PARTNER_ID='");
	                result.append(partnerId);
	                result.append("'   ");
	            }
	            result.append("   )");
        	}
            break;
        case 2:
        	//若没有授权渠道，则什么都不能查询
        	if(authorityPartnerIdStr == null || StringUtils.isEmpty(authorityPartnerIdStr))
        		result.append("1 = 2");
        	else{
	            result.append(" ( ");
	            result.append("     partnerInfo.PARTNER_LEVEL=2   ");
	            if(StringUtils.isNotBlank(partnerId)){
	                result.append("    and  partnerInfo.PARTNER_ID='");
	                result.append(partnerId);
	                result.append("'  ");
	            }
	            result.append("     and ");
	            result.append("     partnerInfo.PARENT_PARTNERID in ( ").append(authorityPartnerIdStr).append(" )");
	            result.append(" ) ");
        	}
            break;
            
            
            
        case 0: 
        case 3:
        case 4:
        	//若没有授权渠道，则什么都不能查询
        	if(authorityPartnerIdStr == null || StringUtils.isEmpty(authorityPartnerIdStr))
        		result.append("1 = 2");
        	else{
	            result.append(" ( ");
	            if(level!=0){
	                result.append("     partnerInfo.PARTNER_LEVEL=").append(level);
	                result.append("     and ");
	            }
	            
	            if(StringUtils.isNotBlank(partnerId)){
	                result.append("    partnerInfo.PARTNER_ID='");
	                result.append(partnerId);
	                result.append("'   and   ");
	            }
	            
	            result.append("     ( ");
	            java.util.StringTokenizer stk=new java.util.StringTokenizer(authorityPartnerIdStr,",");
	            for(int i=0;stk.hasMoreTokens();i++){
	                if(i>0){
	                    result.append(" or ");
	                }
	                //str值为'01'
	                String str=stk.nextToken();
	                result.append(" partnerInfo.PARTNER_ID like '").append(str.substring(1,str.length()-1)).append("%'    "); 
	            }
	            result.append("     ) ");          
	            result.append(" ) ");
        	}
            break;
        }
        return result.toString();
    }
    
    
        /**
         * 
         * 返回渠道查询的SQL语句的Where条件的，只包含like '渠道ID%' 部分
         * @param authorityPartnerIdStr 操作员可查看的渠道编号
         * @return where语句的like条件字符串
         * 2015年11月27日 by zhiqiang.zhang
         */
        public static String getPartnerDataQueryAuthoritySQL(String authorityPartnerIdStr){
        	//若没有授权渠道，则什么都不能查询
        	if(authorityPartnerIdStr == null || StringUtils.isEmpty(authorityPartnerIdStr))
        		return "1=2";
            
            StringBuilder result=new StringBuilder();
            result.append(" ( "); 
            java.util.StringTokenizer stk=new java.util.StringTokenizer(authorityPartnerIdStr,",");
            for(int i=0;stk.hasMoreTokens();i++){
                if(i>0){
                    result.append(" or ");
                }
                //str值为'01'
                String str=stk.nextToken();
                
                result.append(" partnerInfo.PARTNER_ID like '").append(str.substring(1,str.length()-1)).append("%'    "); 
            }
            result.append("     ) ");         
           
            return result.toString();
        }
    
    
    
    
    /**
     * //TODO 添加方法功能描述
     * @param args
     * 2015年11月2日 by zhiqiang.zhang 
     */
    public static void main(String[] args) {
        //System.out.println(getPartnerDataQueryAuthoritySQL(null,"'01','02','03'",null));
        
        System.out.println(getPartnerDataQueryAuthoritySQL(null, "'12','222'", null));

    }

}
